import {
  Controller,
  Get,
  Post,
  Body,
  Put,
  Param,
  UseGuards,
  Request,
  Delete,
} from '@nestjs/common';
import { RoleService } from './role.service';
import { CreateRoleDto } from './dto/create-role.dto';
import { UpdateRoleDto } from './dto/update-role.dto';
import { JwtAuthGuard } from 'src/auth/jwt-auth.guard';

@Controller('roles')
@UseGuards(JwtAuthGuard) // 确保 JWT 认证守卫在 RoleGuard 之前执行
export class RoleController {
  constructor(private readonly roleService: RoleService) {}
  // 创建角色
  @Post()
  async create(@Body() createRoleDto: CreateRoleDto) {
    return await this.roleService.create(createRoleDto);
  }

  // 查询所有角色
  @Get()
  @UseGuards(JwtAuthGuard) // 确保 JWT 认证守卫在 RoleGuard 之前执行
  async findAll() {
    return await this.roleService.findAll();
  }

  // 查询单个角色
  @Get(':id')
  @UseGuards(JwtAuthGuard) // 确保 JWT 认证守卫在 RoleGuard 之前执行
  findOne(@Param('id') id: string) {
    return this.roleService.findOne(+id);
  }

  // 更新用户角色
  @Put(':id')
  @UseGuards(JwtAuthGuard) // 确保 JWT 认证守卫在 RoleGuard 之前执行
  async update(
    @Body() updateRoleDto: UpdateRoleDto,
    @Request() req, // 从请求中获取当前用户信息
  ) {
    const userId = req.user.sub;
    const { newRoleId } = updateRoleDto;
    return await this.roleService.update(userId, newRoleId);
  }

  // 删除角色
  @Delete(':id')
  @UseGuards(JwtAuthGuard) // 确保 JWT 认证守卫在 RoleGuard 之前执行
  remove(@Param('id') id: string) {
    return this.roleService.remove(+id);
  }

  // 统计各个角色用户数量
  @Get('get/count')
  countRoleUser() {
    return this.roleService.countRoleUser();
  }
}
